package com.mall.b2c.service;

import java.math.BigDecimal;

import net.sf.json.JSONObject;

import com.mall.b2c.bean.MemberBean;
import com.mall.b2c.domain.member.MemberDomain;
import com.mall.common.bean.Pager;
import com.mall.common.domain.component.PaymentTypeDomain;
import com.mall.common.service.BaseService;

/**
 * Service接口 - 会员
 */
public interface MemberService extends BaseService<MemberDomain, Long> {

	/**
	 * 判断验证手机号是否已经存在
	 * @param mobile 手机号码
	 * @param id 会员id
	 * @return
	 */
	boolean isExistMobile(String mobile, Long id);
	
	/**
	 * 注册会员
	 * @param mobile 手机号码
	 * @param password 密码
	 * @param ip 注册ip
	 * @return
	 */
	MemberBean register(String mobile, String password, String ip, Long inviterId);
	
	/**
	 * 会员登陆
	 * @param username 会员名称
	 * @param password 密码
	 * @param loginIP 登陆ip
	 */
	MemberBean login(String username, String password, String loginIP);
	
	/**
	 * 失败处理
	 * @param member
	 */
	void loginFail(MemberDomain member);
	
	/**
	 * 判断邮箱是否已经存在
	 * @param eamil 邮箱
	 * @param id 会员id
	 * @return
	 */
	boolean isExistEamil(String email, Long id);
	
	/**
	 * 根据输入值判断通过那种方式登录
	 * @param inputValue
	 * @return
	 */
	MemberDomain getMemberByRegex(String inputValue);
	
	/**
	 * 发送手机验证码
	 * @param mobile 手机号码
	 * @param memberId 会员id
	 * @param type 验证码类型:0.会员注册 1.手机换绑 2.修改密码
	 * @return 验证码信息
	 */
	JSONObject sendMobileCaptcha(String mobile, String ip, Boolean isCaptcha, Long memberId, int type);

	/**
	 * 发送验证邮件
	 * @param email 邮箱
	 * @param memberId 会员id
	 * @param type 验证码类型：1..邮箱换绑 2.密码找回
	 * @return
	 */
	String sendEmail(String email, Long memberId, int type);
	
	/**
	 * 修改邮箱（换绑）
	 * @param code 验证码
	 */
	MemberDomain modifyEmail(String code);
	
	/**
	 * 修改手机（换绑）
	 * @param mobile 手机号码
	 * @param memberId 会员id
	 */
	void modifyMobile(String mobile, Long memberId);
	
	/**
	 * 修改会员密码
	 * @param id 会员id
	 * @param oldPassword 原始密码
	 * @param newPassword 新密码
	 */
	void modifyPwd(Long id, String oldPassword, String newPassword);

	/**
	 * 重置密码
	 * @param id 会员id
	 * @param password 原始密码
	 */
	void resetPwd(Long id, String password);
	
	/**
	 * 找回密码验证
	 * @param code 验证码
	 * @return
	 */
	MemberBean recovery(String code);
	
	/**
	 * 获取收藏商品
	 * @param memberId 会员id
	 * @param pageNumber 页码
	 * @return
	 */
	Pager getFavoriteGoods(Long memberId, Integer pageNumber);
	
	/**
	 * 收藏商品
	 * @param goodsId 商品id
	 * @param memberId 会员id
	 */
	void addFavoriteGoods(Long[] goodsIds, Long memberId);

	/**
	 * 移出收藏商品
	 * @param goodsIds 商品id
	 * @param memberId 会员id
	 */
	void deleteFavoriteGoods(Long[] goodsIds, Long memberId);

	/**
	 * 客户充值
	 * @param tradeNo 支付编号
	 * @param paymentType 支付方式
	 * @param amount 充值金额
	 * @param dealId 第三方交易编号
	 * @param memberId 会员id
	 * @return
	 */
	boolean recharge(String tradeNo, PaymentTypeDomain paymentType, BigDecimal amount, String dealId, Long memberId);
	
	/**
	 * 保存会员信息
	 * @param member 会员信息
	 */
	void saveMember(MemberBean member);

	void rechargeWithCard(Long memberId, BigDecimal money, Long id);

	/**
	 * 禁用帐号
	 * @param ids
	 */
	void disable(Long[] ids);

	/**
	 * 启用帐号
	 * @param ids
	 */
	void enable(Long[] ids);
}
